import com.spring.demo.*;
import com.spring.demo.controller.UserController;
import com.spring.demo.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

// 启动类
public class App {
    public static void main(String[] args) {

        // 1.得到 spring 对象
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-config.xml");

        // 1.通过名称来获取bean对象 , 这个需要进行类转换，不太好看
//        Student student = (Student) context.getBean("student");

        // 2.通过类型方式来获取
//        Student student = context.getBean(Student.class);

        // 3.上面两种方式结合
//         Student student = context.getBean("student" ,Student.class);

        // 2.得到 bean 对象
        //Student student = context.getBean("student" ,Student.class);
        // 3.使用 bean 对象
        //student.sayHi();

        //Scontroller scontroller = context.getBean("scontroller", Scontroller.class);
        //scontroller.sayHi();

        // 注意没获取到 bean 对象，原因：没有加类注解，类注解的功能都是一样的，名字不同是为了区分，形如车牌
        // 注意五大类注解，得到 bean对象，getBean第一个参数：默认都是类名首字母小写，
        // 特殊情况：类名首字母和第二个字母都为大写，则参数就是原类名
        //SController2 sController2 = context.getBean("SController2",SController2.class);
        //sController2.sayHi();
        
        // 使用bean 方法注解，获取bean对象，getBean第一个参数是方法名
        // User user = context.getBean("user1",User.class);
        // 注意@Bean 使用了重命名之后，原先的 方法名就不再适用了，要使用重命名之后的
        //User user = context.getBean("newUser",User.class);
        //System.out.println(user.getId());

        UserController userController = context.getBean("userController",UserController.class);
        userController.sayHi();

        UserService userService = context.getBean("userService",UserService.class);
        userService.sayHi();
    }
}
